home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / emulator / bsvc-1.000 / bsvc-1 / bsvc-1.0.4 / src / Assemblers / 68kasm / error.c < prev    next >
C/C++ Source or Header  |  1995-07-26  |  4KB  |  81 lines

  1. /******************************************************************************
  2.  * $Id: error.c,v 1.1 1994/08/29 23:57:26 bmott Exp $
  3.  ******************************************************************************
  4.  *
  5.  *        ERROR.C
  6.  *        Error message printer for 68000 Assembler
  7.  *
  8.  *    Function: printError()
  9.  *        Prints an appropriate message to the specified output
  10.  *        file according to the error code supplied. If the
  11.  *        errorCode is OK, no message is printed; otherwise an
  12.  *        WARNING or ERROR message is produced. The line number
  13.  *        will be included in the message unless lineNum = -1.
  14.  *
  15.  *     Usage:    printError(outFile, errorCode, lineNum)
  16.  *        FILE *outFile;
  17.  *        int errorCode, lineNum;
  18.  *
  19.  *      Author: Paul McKee
  20.  *        ECE492    North Carolina State University
  21.  *
  22.  *        Date:    12/12/86
  23.  *
  24.  *   Copyright 1990-1991 North Carolina State University. All Rights Reserved.
  25.  *
  26.  ******************************************************************************
  27.  * $Log: error.c,v $
  28.  * Revision 1.1  1994/08/29  23:57:26  bmott
  29.  * Initial revision
  30.  *
  31.  *****************************************************************************/
  32.  
  33.  
  34. #include <stdio.h>
  35. #include "asm.h"
  36.  
  37. printError(outFile, errorCode, lineNum)
  38. FILE *outFile;
  39. int errorCode, lineNum;
  40. {
  41. char numBuf[20];
  42.  
  43.     if (lineNum >= 0)
  44.         sprintf(numBuf, " in line %d", lineNum);
  45.     else
  46.         numBuf[0] = '\0';
  47.  
  48.     switch (errorCode) {
  49.         case SYNTAX         : fprintf(outFile, "ERROR%s: Invalid syntax\n", numBuf); break;
  50.         case UNDEFINED         : fprintf(outFile, "ERROR%s: Undefined symbol\n", numBuf); break;
  51.         case DIV_BY_ZERO     : fprintf(outFile, "ERROR%s: Division by zero attempted\n", numBuf); break;
  52.         case NUMBER_TOO_BIG  : fprintf(outFile, "WARNING%s: Numeric constant exceeds 32 bits\n", numBuf); break;
  53.         case ASCII_TOO_BIG   : fprintf(outFile, "WARNING%s: ASCII constant exceeds 4 characters\n", numBuf); break;
  54.         case INV_OPCODE      : fprintf(outFile, "ERROR%s: Invalid opcode\n", numBuf); break;
  55.         case INV_SIZE_CODE   : fprintf(outFile, "WARNING%s: Invalid size code\n", numBuf); break;
  56.         case INV_ADDR_MODE   : fprintf(outFile, "ERROR%s: Invalid addressing mode\n", numBuf); break;
  57.         case MULTIPLE_DEFS   : fprintf(outFile, "ERROR%s: Symbol multiply defined\n", numBuf); break;
  58.         case PHASE_ERROR     : fprintf(outFile, "ERROR%s: Symbol value differs between first and second pass\n", numBuf); break;
  59.         case INV_QUICK_CONST : fprintf(outFile, "ERROR%s: MOVEQ instruction constant out of range\n", numBuf); break;
  60.         case INV_VECTOR_NUM  : fprintf(outFile, "ERROR%s: Invalid vector number\n", numBuf); break;
  61.         case INV_BRANCH_DISP : fprintf(outFile, "ERROR%s: Branch instruction displacement is out of range or invalid\n", numBuf); break;
  62.         case LABEL_REQUIRED  : fprintf(outFile, "ERROR%s: Label required with this directive\n", numBuf); break;
  63.         case INV_DISP         : fprintf(outFile, "ERROR%s: Displacement out of range\n", numBuf); break;
  64.         case INV_ABS_ADDRESS : fprintf(outFile, "ERROR%s: Absolute address exceeds 16 bits\n", numBuf); break;
  65.         case INV_8_BIT_DATA  : fprintf(outFile, "ERROR%s: Immediate data exceeds 8 bits\n", numBuf); break;
  66.         case INV_16_BIT_DATA : fprintf(outFile, "ERROR%s: Immediate data exceeds 16 bits\n", numBuf); break;
  67.         case INCOMPLETE      : fprintf(outFile, "WARNING%s: Evaluation of expression could not be completed\n", numBuf); break;
  68.         case NOT_REG_LIST    : fprintf(outFile, "ERROR%s: The symbol specified is not a register list symbol\n", numBuf); break;
  69.         case REG_LIST_SPEC   : fprintf(outFile, "ERROR%s: Register list symbol used in an expression\n", numBuf); break;
  70.         case REG_LIST_UNDEF  : fprintf(outFile, "ERROR%s: Register list symbol not previously defined\n", numBuf); break;
  71.         case INV_SHIFT_COUNT : fprintf(outFile, "ERROR%s: Invalid constant shift count\n", numBuf); break;
  72.         case INV_FORWARD_REF : fprintf(outFile, "ERROR%s: Forward references not allowed with this directive\n", numBuf); break;
  73.         case INV_LENGTH      : fprintf(outFile, "ERROR%s: Block length is less that zero\n", numBuf); break;
  74.         case ODD_ADDRESS     : fprintf(outFile, "ERROR%s: Origin value is odd (Location counter set to next highest address)\n", numBuf); break;
  75.         default : if (errorCode > ERROR)
  76.                 fprintf(outFile, "ERROR%s: No message defined\n", numBuf);
  77.               else if (errorCode > WARNING)
  78.                 fprintf(outFile, "WARNING%s: No message defined\n", numBuf);
  79.         }
  80. }
  81.